#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+10,INF=0x3f3f3f3f;
int n,head[MAXN],ans,k,cnt,root,sum,sumch[MAXN],f[MAXN],d[MAXN],dis[MAXN],t[1000010];
bool vis[MAXN];
struct edge
{
	int v,next,val;
}e[MAXN*2];
void addedge(int x,int y,int z)
{
    e[++cnt]=(edge){y,head[x],z};
    head[x]=cnt;
    return;
}
void getroot(int u,int fa)
{
    sumch[u]=1;
    f[u]=0;
    for(int i=head[u];i;i=e[i].next)
    {
        int v=e[i].v;
        if(vis[v]||v==fa)continue;
        getroot(v,u);
        sumch[u]+=sumch[v];
        f[u]=max(f[u],sumch[v]);
    }
    f[u]=max(f[u],sum-sumch[u]);
    if(f[u]<f[root])root=u;
    return;
}
void cal(int u,int fa)
{
	if(dis[u]<=k)ans=min(ans,d[u]+t[k-dis[u]]);
	for(int i=head[u];i;i=e[i].next)
	{
		int v=e[i].v;
		if(vis[v]||v==fa)continue;
		d[v]=d[u]+1;
		dis[v]=dis[u]+e[i].val;
		cal(v,u);
	}
	return;
}
void add(int u,int fa,bool flag)
{
	if(dis[u]<=k)
	{
		if(flag)t[dis[u]]=min(t[dis[u]],d[u]);
		else t[dis[u]]=INF;
	}
	for(int i=head[u];i;i=e[i].next)
	{
		int v=e[i].v;
		if(vis[v]||v==fa)continue;
		add(v,u,flag);
	}
	return;
}
void solve(int u)
{
	vis[u]=true;
	t[0]=0;
	for(int i=head[u];i;i=e[i].next)
	{
		int v=e[i].v;
		if(vis[v])continue;
		d[v]=1;
		dis[v]=e[i].val;
		cal(v,0);
		add(v,0,1);
	}
	for(int i=head[u];i;i=e[i].next)
	{
		int v=e[i].v;
		if(vis[v])continue;
		add(v,0,0);
	}
	for(int i=head[u];i;i=e[i].next)
	{
		int v=e[i].v;
		if(vis[v])continue;
		root=0;
		sum=sumch[v];
		getroot(v,0);
		solve(root);
	}
}
int main()
{
	scanf("%d%d",&n,&k);
	for(int i=1;i<n;++i)
	{
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		++x;++y;
		addedge(x,y,z);
		addedge(y,x,z);
	}
	for(int i=1;i<=k;++i)t[i]=n;
	sum=ans=f[0]=n;
	getroot(1,0);
	solve(root);
	if(ans!=n)printf("%d\n",ans);
	else puts("-1");
	return 0;
}
